package com.hyt.it.ogt.kq.common.utils;

/**
 * @PACKAGE_NAME: com.hyt.it.ogt.kq.common.utils
 * @USER: Wuyingge
 * @DATE: 2023/10/8 17:34
 * @PROJECT_NAME: it-ogt-kq
 * @Desc : 用与判断字符的长度，汉字的非汉字的
 **/
public class CharUtil {

    /**
     * 获取其中汉字的长度
     * @param value
     * @return
     */
    public static int isChineseLength(String value) {
        int valueLength = 0;
        String chinese = "[\u0391-\uFFE5]";
        /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为3，否则为1 */
        for (int i = 0; i < value.length(); i++) {
            /* 获取一个字符 */
            String temp = value.substring(i, i + 1);
            /* 判断是否为中文字符 */
            if (temp.matches(chinese)) {
                /* 中文字符长度为3 */
                valueLength += 3;
            } else {
                /* 其他字符长度为1 */
                valueLength += 1;
            }
        }
        return valueLength;
    }

    /**
     * 获取其中非汉字的长度
     * @param value
     * @return
     */
    public static int notChineseLength(String value) {
        int valueLength = 0;
        String chinese = "[\u0391-\uFFE5]";
        /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为3，否则为1 */
        for (int i = 0; i < value.length(); i++) {
            /* 获取一个字符 */
            String temp = value.substring(i, i + 1);
            /* 判断是否为中文字符 */
            if (temp.matches(chinese)) {
                /* 中文字符长度为3 */
                valueLength += 3;
            } else {
                /* 其他字符长度为1 */
                valueLength += 1;
            }
        }
        return valueLength;
    }

    public static void main(String[] args) {
        String str = "我的天";
        System.out.println(isChineseLength(str));
        System.out.println(getChineseLength(str));
        String str2 = "我的天--abc/.";
        System.out.println(isChineseLength(str2));
        System.out.println(getChineseLength(str2));
        System.out.println(getNotChineseLength(str2));
    }

    public static boolean isChinese(char c) {
        Character.UnicodeScript sc = Character.UnicodeScript.of(c);
        return sc == Character.UnicodeScript.HAN;
    }

    /**
     * 获取其中汉字的长度
     * @param value
     * @return
     */
    public static int getChineseLength(String value) {
        int valueLength = 0;
        char[] chars = value.toCharArray();
        /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为3，否则为1 */
        for (int i = 0; i < value.length(); i++) {
            /* 获取一个字符 */
            char temp = chars[i];

            /* 判断是否为中文字符 */
            if (isChinese(temp)) {
                /* 中文字符长度为3 */
                valueLength += 1;
            }
        }
        return valueLength;
    }

    /**
     * 获取其中非汉字的长度
     * @param value
     * @return
     */
    public static int getNotChineseLength(String value) {
        int valueLength = 0;
        char[] chars = value.toCharArray();
        /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为3，否则为1 */
        for (int i = 0; i < value.length(); i++) {
            /* 获取一个字符 */
            char temp = chars[i];

            /* 判断是否为中文字符 */
            if (!isChinese(temp)) {
                /* 中文字符长度为3 */
                valueLength += 1;
            }
        }
        return valueLength;
    }

}
